package com.microframework.base.core.datasource.annotation;

import java.lang.annotation.*;

/**
 * JFinal事务注解
 * 用于标记需要在事务中执行的方法，提供完整的事务控制能力
 * 该注解由Spring AOP处理，提供JFinal的事务管理能力
 */
@Inherited
@Target({ ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
public @interface Tx {
    /**
     * 指定使用的数据源名称
     * 默认使用主数据源
     */
    String value() default "";
    
    /**
     * 事务超时时间（秒）
     * 小于等于0表示不超时
     * 默认值-1表示使用系统默认超时设置
     */
    int timeout() default -1;
    
    /**
     * 是否在嵌套事务中使用保存点
     * 默认true表示支持嵌套事务
     * 设置为false时，嵌套事务将作为整体事务的一部分
     */
    boolean useSavepoint() default true;
    
    /**
     * 指定需要回滚的异常类型
     * 当方法抛出指定异常时，事务将回滚
     * 默认情况下，回滚所有RuntimeException和Error
     */
    Class<? extends Throwable>[] rollbackFor() default {};
    
    /**
     * 指定不需要回滚的异常类型
     * 当方法抛出指定异常时，事务不会回滚
     * 优先级高于rollbackFor
     */
    Class<? extends Throwable>[] noRollbackFor() default {};
    
    /**
     * 事务隔离级别
     * 默认-1表示使用数据库默认隔离级别
     * 可选值参考java.sql.Connection中的常量：
     * Connection.TRANSACTION_READ_UNCOMMITTED
     * Connection.TRANSACTION_READ_COMMITTED
     * Connection.TRANSACTION_REPEATABLE_READ
     * Connection.TRANSACTION_SERIALIZABLE
     */
    int isolation() default -1;
}